package com.xingkeduo.business.user.service;

import com.xingkeduo.dao.database.DatabaseAccessObject;
import com.xingkeduo.pojo.query.JobseekerJobHistoryQO;
import com.xingkeduo.pojo.query.JobseekerJobQO;
import com.xingkeduo.pojo.table.JobseekerJobHistoryTO;
import com.xingkeduo.pojo.table.JobseekerJobTO;
import com.xingkeduo.util.pojo.enums.HistoryTypeEnum;
import com.xingkeduo.util.pojo.enums.YesNoEnum;
import com.xingkeduo.util.pojo.exception.DataException;
import com.xingkeduo.util.tool.CommonUtil;
import com.xingkeduo.util.tool.IdentityUtil;
import com.xingkeduo.util.tool.IdentityUtil.Worker;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 求职者封装类
 * 
 * @author 高杰
 * @time 2018年12月25日 下午1:41:24
 * @description
 */
@Component
public class JobseekerJobService {
	private static final String NAMESPACE = CommonUtil.formatNamespace(JobseekerJobTO.class);
	private static final String NAMESPACE_HISTORY = CommonUtil.formatNamespace(JobseekerJobHistoryTO.class);
	@Resource(name = "mysqlUserMasterDao")
	private DatabaseAccessObject<JobseekerJobTO, JobseekerJobQO> dao;
	@Resource(name = "mysqlUserMasterDao")
	private DatabaseAccessObject<JobseekerJobHistoryTO, JobseekerJobHistoryQO> historyDao;

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2018年12月27日 上午11:51:47
	 * @param code
	 * @return
	 * @throws Throwable
	 */
	public JobseekerJobTO selectByPrimary(long id) throws Throwable {
		return dao.select(NAMESPACE, id);
	}

	/**
	 * 查询主键
	 * 
	 * @author 高杰
	 * @time 2019年1月3日 上午10:42:06
	 * @param query
	 * @return
	 * @throws Throwable
	 */
	public List<Long> selectPrimaryByQuery(JobseekerJobQO query) throws Throwable {
		return dao.selectIndex(NAMESPACE, query);
	}

	/**
	 * 查询主键
	 *
	 * @author 高杰
	 * @time 2019年1月3日 上午10:42:06
	 * @param query
	 * @return
	 * @throws Throwable
	 */
	public List<JobseekerJobTO> selectQuery(JobseekerJobQO query) throws Throwable {
		return dao.select(NAMESPACE, query);
	}

	/**
	 * 新增
	 * 
	 * @author 高杰
	 * @time 2018年12月25日 下午2:19:27
	 * @param jobseeker
	 * @throws Throwable
	 */
	@Transactional
	public void insert(JobseekerJobTO jobseekerJob) throws Throwable {
		if (dao.insert(NAMESPACE, jobseekerJob) < 1)
			throw new DataException(DataException.Type.FAIL, "求职者工作信息");

		JobseekerJobHistoryTO history = new JobseekerJobHistoryTO().setHistoryId(IdentityUtil.nextId(Worker.USER))
				.setJobseekerJob(jobseekerJob.setIsDelete(YesNoEnum.NO).setVersion(1))
				.setCreatedBy(jobseekerJob.getCreatedBy()).setHistoryType(HistoryTypeEnum.NEW)
				.setUpdatedBy(jobseekerJob.getUpdatedBy());
		historyDao.insert(NAMESPACE_HISTORY, history);
	}

	/**
	 * 更新
	 * 
	 * @author 高杰
	 * @time 2018年12月25日 下午2:19:27
	 * @param jobseeker
	 * @throws Throwable
	 */
	@Transactional
	public void update(JobseekerJobTO jobseekerJob) throws Throwable {
		if (dao.update(NAMESPACE, jobseekerJob) < 1)
			throw new DataException(DataException.Type.FAIL, "求职者身份信息");

		jobseekerJob = dao.select(NAMESPACE, jobseekerJob.getId());

		JobseekerJobHistoryTO history = new JobseekerJobHistoryTO().setHistoryId(IdentityUtil.nextId(Worker.USER))
				.setJobseekerJob(jobseekerJob).setCreatedBy(jobseekerJob.getUpdatedBy())
				.setHistoryType(HistoryTypeEnum.MODIFY).setUpdatedBy(jobseekerJob.getUpdatedBy());
		historyDao.insert(NAMESPACE_HISTORY, history);
	}

	/**
	 * 查询总数
	 * 
	 * @author 高杰
	 * @time 2018年12月26日 下午2:07:38
	 * @param code
	 * @return
	 * @throws Throwable
	 */
	public int countByPrimary(long id) throws Throwable {
		return count(new JobseekerJobQO().setId(id));
	}

	/**
	 * 查询总数
	 * 
	 * @author 高杰
	 * @time 2018年12月26日 下午1:57:44
	 * @param jobseekerJobQuery
	 * @return
	 * @throws Throwable
	 */
	private int count(JobseekerJobQO jobseekerJobQuery) throws Throwable {
		return dao.selectCount(NAMESPACE, jobseekerJobQuery);
	}
}
